#region Copyright (c) 2003, newtelligence AG. All rights reserved.
/*
// Copyright (c) 2003, newtelligence AG. (http://www.newtelligence.com)
// Original BlogX Source Code: Copyright (c) 2003, Chris Anderson (http://simplegeek.com)
// All rights reserved.
//  
// Redistribution and use in source and binary forms, with or without modification, are permitted 
// provided that the following conditions are met: 
//  
// (1) Redistributions of source code must retain the above copyright notice, this list of 
// conditions and the following disclaimer. 
// (2) Redistributions in binary form must reproduce the above copyright notice, this list of 
// conditions and the following disclaimer in the documentation and/or other materials 
// provided with the distribution. 
// (3) Neither the name of the newtelligence AG nor the names of its contributors may be used 
// to endorse or promote products derived from this software without specific prior 
// written permission.
//      
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS 
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// -------------------------------------------------------------------------
//
// Original BlogX source code (c) 2003 by Chris Anderson (http://simplegeek.com)
// 
// newtelligence is a registered trademark of newtelligence Aktiengesellschaft.
// 
// For portions of this software, the some additional copyright notices may apply 
// which can either be found in the license.txt file included in the source distribution
// or following this notice. 
//
*/
#endregion



namespace newtelligence.DasBlog.Web
{
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Configuration;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using newtelligence.DasBlog.Runtime;
    using newtelligence.DasBlog.Web.Core;

    /// <summary>
    /// Summary description for WebForm1.
    /// </summary>
    public partial class CategoryView : SharedBasePage 
    {

        
		#region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
		
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {    
           
        }
		#endregion

        protected override PlaceHolder ContentPlaceHolder
        {
            get
            {
                return contentPlaceHolder;
            }
        }

        protected override EntryCollection LoadEntries()
        {

			SharedBasePage requestPage = this.Page as SharedBasePage;

			EntryCollection entryCollection = null;

			if (requestPage.SiteConfig.CategoryAllEntries)
			{
				//entryCollection = dataService.GetEntriesForDay( DateTime.MaxValue.AddDays(-2), new Util.UTCTimeZone(), Request.Headers["Accept-Language"], int.MaxValue, int.MaxValue, categoryName );
				entryCollection = dataService.GetEntriesForCategory(categoryName,Request.Headers["Accept-Language"]);
			}
			else
			{
				//entryCollection = dataService.GetEntriesForDay( DateTime.MaxValue.AddDays(-2), new Util.UTCTimeZone(), Request.Headers["Accept-Language"], siteConfig.FrontPageDayCount, int.MaxValue, categoryName );
				//entryCollection = dataService.GetEntriesForDay( DateTime.MaxValue.AddDays(-2), new Util.UTCTimeZone(), Request.Headers["Accept-Language"], int.MaxValue, int.MaxValue, categoryName );
				entryCollection = dataService.GetEntriesForCategory(categoryName,Request.Headers["Accept-Language"]);

				//Do some paging if we are NOT showing all entries in category view.
				int page = 1;
				int maxPage = 1;
				try
				{
					string pageString = Request.QueryString["page"];
					page = int.Parse(pageString, System.Globalization.CultureInfo.InvariantCulture);
				}
				catch(Exception){ page = 1;}

				if (page != 0)
				{
					int count = entryCollection.Count;

					if (count == 0)
					{
						Response.Redirect(Utils.GetBaseUrl());
					}

					int ENTRIESPERPAGE = this.SiteConfig.EntriesPerPage;
					//int maxPage = count / ENTRIESPERPAGE + ((count%ENTRIESPERPAGE > 0) ? 1 : 0);
					maxPage = (int)(Math.Ceiling((double)count / (double)ENTRIESPERPAGE));
					if (page > maxPage){page = maxPage;}
					int lastEntryToInclude = page * ENTRIESPERPAGE ;
					
					//page 1, remove everything after
					//page maxpage, remove everything before
					//1 < page < maxpage, remove left and right.
					if (page == maxPage)
					{
						entryCollection.RemoveRange(0, lastEntryToInclude-ENTRIESPERPAGE);
					}
					else 
					{
						//remove to the right
						entryCollection.RemoveRange(lastEntryToInclude, count-lastEntryToInclude);
						//remove to the left
						entryCollection.RemoveRange(0, lastEntryToInclude-ENTRIESPERPAGE);
					}

					HttpContext.Current.Items["page"] = page;
					HttpContext.Current.Items["maxpage"] = maxPage;
				}
			}

			/*
			 * SDH: Can't do this kind of caching now that we are paging...
			 * caching will be handled by outputcache in the aspx now.
			 * if (NotModified(entryCollection))
			{
				Response.End();
				return null;
			}
			*/
			
			return entryCollection;
		}

        public override string GetPageTemplate(string path)
        {
            return base.GetPageTemplate( path );
        }

        protected override Macros InitializeMacros()
        {
            return MacrosFactory.CreateMacrosInstance( this );
        }

        public override void ProcessItemTemplate( newtelligence.DasBlog.Runtime.Entry item, Control ContentPlaceHolder )
        {
            base.ProcessItemTemplate( item, ContentPlaceHolder );
        
        }

        public override string GetItemTemplate()
        {
            return base.GetItemTemplate();
        }
      }


}
